package com.lonely.fx;

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.TextArea;
import javafx.scene.control.TextField;
import javafx.scene.layout.VBox;
import javafx.stage.DirectoryChooser;
import javafx.stage.FileChooser;
import javafx.stage.Stage;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.nio.charset.StandardCharsets;
import java.util.List;

/**
 * @date: 2022-07-25 13:33
 * @author: ztkj-hzb
 * @description: 文件选择器
 **/
public class FileChooserSettingMain extends Application {

    public static void main(String[] args) {
        launch(args);
    }

    /**
     *
     */
    @Override
    public void start(Stage primaryStage) throws Exception {

        VBox vBox = new VBox();
        vBox.setSpacing(30);
        vBox.setPadding(new Insets(20));

        Button button1 = new Button("选择文件--单选");
        Button button2 = new Button("选择文件--多选");


        Button button3 = new Button("保存文件");
        TextArea textArea = new TextArea();
        textArea.prefWidthProperty().bind(vBox.widthProperty());


        //选择文件
        button1.setOnAction(event -> {

            //创建文件选择器
            FileChooser fileChooser = new FileChooser();

            //文件选择器窗口的标题，默认是 打开
            fileChooser.setTitle("请选择");

            //设置默认打开窗体显示的目录
            fileChooser.setInitialDirectory(new File("D:/"));

            //设置弹出框的文件名---多用于保存窗口
            //fileChooser.setInitialFileName("新文件");

            //设置打开窗体显示文件过滤器，比如只展示指定格式的文件
            fileChooser.getExtensionFilters().addAll(
                    new FileChooser.ExtensionFilter("图片", "*.jpg", "*.png"),
                    new FileChooser.ExtensionFilter("文本", "*.txt"),
                    new FileChooser.ExtensionFilter("所有", "*.*"));

            //打开面板----单选文件
            File file = fileChooser.showOpenDialog(primaryStage);

            //当没有选择文件，关闭窗口或者取消时候，会返回null
            if(file == null){
                return;
            }

            System.out.println(file.getAbsolutePath());

            //打开面板---多选文件
            //fileChooser.showOpenMultipleDialog(primaryStage);

            //打开面板---保存窗口
            //fileChooser.showSaveDialog(primaryStage);

        });


        button2.setOnAction(event -> {

            //创建文件选择器
            FileChooser fileChooser = new FileChooser();

            //设置打开窗体显示文件过滤器，比如只展示指定格式的文件
            fileChooser.getExtensionFilters().addAll(
                    new FileChooser.ExtensionFilter("图片", "*.jpg", "*.png"),
                    new FileChooser.ExtensionFilter("文本", "*.txt"),
                    new FileChooser.ExtensionFilter("所有", "*.*"));

            //打开面板----单选文件
            List<File> files = fileChooser.showOpenMultipleDialog(primaryStage);

            if(files == null){
                return;
            }

            for (File file : files) {
                System.out.println(file.getAbsolutePath());
            }

            //打开面板---多选文件
            //fileChooser.showOpenMultipleDialog(primaryStage);

            //打开面板---保存窗口
            //fileChooser.showSaveDialog(primaryStage);

        });

        button3.setOnAction(event -> {
            FileChooser fileChooser = new FileChooser();
            fileChooser.setInitialFileName("新文件");
            fileChooser.getExtensionFilters().add(new FileChooser.ExtensionFilter("文本","*.txt"));
            File file = fileChooser.showSaveDialog(primaryStage);

            if(file == null){
                return;
            }

            try {
                FileOutputStream fileOutputStream = new FileOutputStream(file);
                fileOutputStream.write(textArea.getText().getBytes(StandardCharsets.UTF_8));
                fileOutputStream.flush();
                fileOutputStream.close();
            } catch (Exception e) {
                e.printStackTrace();
            }


        });


        vBox.getChildren().addAll(button1, button2,button3,textArea);
        primaryStage.setScene(new Scene(vBox));
        primaryStage.setWidth(600);
        primaryStage.setHeight(500);
        primaryStage.show();
    }
}
